草庐IT

vc x86.mis

全部标签

linux - 如何在 Linux 上使用 gcc 程序集在 x86-64 中设置控制寄存器 0 (cr0) 位

我正在使用以下代码设置cr0位以禁用缓存。当我编译这个时#includeintmain(){__asm__("pushl%eax\n\t""mov%cr0,%eax;\n\t""orl$(1我收到错误消息,指出操作数对mov无效。任何人都可以给我指一个好的gccx86-64指南来做这些事情吗?另外上面的代码到底有什么问题? 最佳答案 好吧,最后我写了下面的内核模块。我不确定它是否正确,因为我没有观察到禁用缓存时应该伴随的急剧减速。但这可以正确编译和插入。任何指示都会有所帮助。谢谢!#include#includeMODULE_LIC

linux - 如何在 Linux 上使用 gcc 程序集在 x86-64 中设置控制寄存器 0 (cr0) 位

我正在使用以下代码设置cr0位以禁用缓存。当我编译这个时#includeintmain(){__asm__("pushl%eax\n\t""mov%cr0,%eax;\n\t""orl$(1我收到错误消息,指出操作数对mov无效。任何人都可以给我指一个好的gccx86-64指南来做这些事情吗?另外上面的代码到底有什么问题? 最佳答案 好吧,最后我写了下面的内核模块。我不确定它是否正确,因为我没有观察到禁用缓存时应该伴随的急剧减速。但这可以正确编译和插入。任何指示都会有所帮助。谢谢!#include#includeMODULE_LIC

linux - 使用 GNU 汇编程序在 x86_64 中调用 printf

我使用AT&T语法编写了一个程序,用于GNU汇编程序:.dataformat:.ascii"%d\n".text.globalmainmain:mov$format,%rbxmov(%rbx),%rdimov$1,%rsicallprintfret我使用GCC来汇编和链接:gcc-omainmain.s我用这个命令运行它:./main当我运行该程序时出现段错误。通过使用gdb,它说printfnotfound。我试过“.externprintf”,它不起作用。有人建议我应该在调用printf之前存储堆栈指针并在RET之前恢复,我该怎么做? 最佳答案

linux - 使用 GNU 汇编程序在 x86_64 中调用 printf

我使用AT&T语法编写了一个程序,用于GNU汇编程序:.dataformat:.ascii"%d\n".text.globalmainmain:mov$format,%rbxmov(%rbx),%rdimov$1,%rsicallprintfret我使用GCC来汇编和链接:gcc-omainmain.s我用这个命令运行它:./main当我运行该程序时出现段错误。通过使用gdb,它说printfnotfound。我试过“.externprintf”,它不起作用。有人建议我应该在调用printf之前存储堆栈指针并在RET之前恢复,我该怎么做? 最佳答案

c++ - 可以捕获写入地址(x86 - linux)

我希望能够检测何时写入内存地址——例如通过设置附加到中断的回调。有谁知道吗?我希望能够在运行时执行此操作(可能gdb具有此功能,但我的特殊应用程序导致gdb崩溃)。 最佳答案 如果你想拦截对一个地址范围的写入,你可以使用mprotect()将有问题的内存标记为不可写,并使用sigaction()安装信号处理程序要捕获生成的SIGSEGV,请执行日志记录或其他操作,然后再次将页面标记为可写。 关于c++-可以捕获写入地址(x86-linux),我们在StackOverflow上找到一个类似

c++ - 可以捕获写入地址(x86 - linux)

我希望能够检测何时写入内存地址——例如通过设置附加到中断的回调。有谁知道吗?我希望能够在运行时执行此操作(可能gdb具有此功能,但我的特殊应用程序导致gdb崩溃)。 最佳答案 如果你想拦截对一个地址范围的写入,你可以使用mprotect()将有问题的内存标记为不可写,并使用sigaction()安装信号处理程序要捕获生成的SIGSEGV,请执行日志记录或其他操作,然后再次将页面标记为可写。 关于c++-可以捕获写入地址(x86-linux),我们在StackOverflow上找到一个类似

linux - 为 x86 和 ARM 编写平台设备驱动程序的区别

我之前从事ARM特定平台驱动程序的工作,最近转向基于IntelAtom的驱动程序。在ARM上,它曾经有arch/arm/boot/dts/xx.dts和arch/arm/mach-xx/用于添加平台设备。我在x86上看不到这些文件或文件夹。当我进入arch/x86/...时,没有dts文件或平台文件。如果我想将我的平台设备添加到英特尔凌动平台中,我该如何添加我的平台设备信息?我在哪里可以获得特定于x86的dts文件(假设即使dts不特定于任何体系结构)? 最佳答案 有两项新功能可让您同时拥有一个适用于x86和ARM世界的驱动程序。首

linux - 为 x86 和 ARM 编写平台设备驱动程序的区别

我之前从事ARM特定平台驱动程序的工作,最近转向基于IntelAtom的驱动程序。在ARM上,它曾经有arch/arm/boot/dts/xx.dts和arch/arm/mach-xx/用于添加平台设备。我在x86上看不到这些文件或文件夹。当我进入arch/x86/...时,没有dts文件或平台文件。如果我想将我的平台设备添加到英特尔凌动平台中,我该如何添加我的平台设备信息?我在哪里可以获得特定于x86的dts文件(假设即使dts不特定于任何体系结构)? 最佳答案 有两项新功能可让您同时拥有一个适用于x86和ARM世界的驱动程序。首

linux - 在 x86 linux 上使用软件浮点

是否可以(轻松地)在i386linux上使用软件float,而不会在每次调用时陷入内核?我试过-msoft-float,但似乎正常的(ubuntu)C库没有包含FP库:$gcc-m32-msoft-float-lm-otesttest.c/tmp/cc8RXn8F.o:Infunction`main':test.c:(.text+0x39):undefinedreferenceto`__muldf3'collect2:ldreturned1exitstatus 最佳答案 令人惊讶的是gcc本身不支持此代码,因为代码在名为soft-f

linux - 在 x86 linux 上使用软件浮点

是否可以(轻松地)在i386linux上使用软件float,而不会在每次调用时陷入内核?我试过-msoft-float,但似乎正常的(ubuntu)C库没有包含FP库:$gcc-m32-msoft-float-lm-otesttest.c/tmp/cc8RXn8F.o:Infunction`main':test.c:(.text+0x39):undefinedreferenceto`__muldf3'collect2:ldreturned1exitstatus 最佳答案 令人惊讶的是gcc本身不支持此代码,因为代码在名为soft-f